应云而生,幽灵的威胁 - 云原生应用交付与运维的思考
本系列文章
* 第一篇 - 云原生基础设施
* 第二篇 - 云原生软件架构
* 第三篇 - 云原生应用交付与运维(本文)
过去的 2020 是充满不确定性的一年,但也是充满机遇的一年。突发的新冠疫情为全社会的数字化转型按下加速键。云计算已经不再是一种技术,而是成为支撑数字经济发展和业务创新的关键基础设施。在利用云计算重塑企业 IT 的过程中,生于云、长于云、最大化实现云价值的云原生技术得到了越来越多企业的认同,成为企业 IT 降本提效的重要手段。
然而,云原生变革也不只是基础设施和应用架构等技术层面,同时也在推进企业 IT 组织、流程和文化的变革。
Kubernetes 成为了通用的、统一的云控制平面
声明式(Declarative)的 API:在 Kubernetes 之上,开发者只需定义抽象资源的目标状态,而由控制器来具体实现如何达成。比如 Deployment、StatefulSet、 Job 等不同类型工作负载资源的抽象。让开发者可以关注于应用自身,而非系统执行细节。声明式API是云原生重要的设计理念,这样的架构方式有助于将整体运维复杂性下沉,交给基础设施实现和持续优化。此外由于分布式系统的内生稳定性挑战,基于声明式的,面向终态的 “level-triggered” 实现比基于命令式 API、事件驱动的 “edge-triggered” 方式可以提供更加健壮的分布式系统实现。
屏蔽底层实现:K8s 通过一系列抽象如 Loadbalance Service、Ingress、CNI、CSI,帮助业务应用可以更好通过业务语义使用基础设施,无需关注底层实现差异。
可扩展性架构:所有 K8s 组件都是基于一致的、开放的 API 进行实现和交互。三方开发者也可通过 CRD(Custom Resource Definition)/ Operator 等方法提供领域相关的扩展实现,极大扩展了 K8s 的应用场景。
基础架构管理:与开源的 Terraform 或者云供应商自身提供的 Infrastructure as Code(IaC)工具如阿里云 ROS、AWS CloudFormation 不同,Crossplane(https://crossplane.io/)和 AWS Controllers for Kubernetes 在 Kubernetes 基础之上扩展了对基础设施的管理和抽象。这样可以采用一致的方式进行管理和变更 K8s 应用和云基础设施。 虚拟机管理:K8s 通过 KubeVirt 可以实现对虚拟机和容器的统一调度与管理,可以利用虚拟化弥补容器技术的一些局限性,比如在 CI/CD 场景中,可以结合 Windows 虚拟机进行自动化测试。 IoT 设备管理:KubeEdge 和 OpenYurt 等边缘容器技术都提供了对海量边缘设备的管理能力。 K8s 集群管理:阿里云容器服务 ACK 的节点池管理,集群管理等完全都是采用 Kubernetes 方式进行自动化管理与运维的。ACK Infra 支撑了部署在全球各地数万个 Kubernetes 集群,基于 K8s 完成自动化了扩缩容、故障发现/自愈等能力。
工作负载自动化升级
由于 K8s 内置工作负载的局限性,一些需求无法满足企业应用迁移的需求,通过Operator framework 进行扩展成为了常见的解决方案。但是一方面对重复的需求重复造轮子,会造成了资源的浪费;也会导致技术的碎片化,降低可移植性。 随着越来越多的企业 IT 架构,从 on Kubernetes 到 in Kubernetes,大量的 CRD、自定义 Controller 给 Kubernetes 的稳定性和性能带来大量的挑战。面向终态的自动化是一把 “双刃剑”,它既为应用带来了声明式的部署能力,同时也潜在地会将一些误操作行为被终态化放大。在发生操作故障时副本数维持、版本一致性、级联删除等机制反而很可能导致爆炸半径扩大。
开发与运维新协作界面浮现
无处不在的安全风险催生安全架构变革
DevSecOps 成为关键因素
服务网格加速零信任安全架构落地
统一身份标识体系:为微服务架构中每一个服务组件都提供一个独立的身份标识。 统一访问的授权模型:服务间调用需要通过身份进行鉴权。 统一访问控制策略:所有服务的访问控制通过标准化方向进行集中管理和统一控制。
既可以利用现有身份服务提供身份标识,也支持 SPIFFE 格式的身份标识。身份标识可以通过 X.509 证书或者 JWT 格式进行传递。 通过服务网格控制平面 API 来统一管理,认证、授权、服务命名等安全策略。 通过 Envoy Sidecar 或者边界代理服务器作为策略执行点(PEP)来执行安全策略,可以为东西向和南北向的服务访问提供安全访问控制。而且 Sidecar 为每个微服务提供了应用级别的防火墙,网络微分段最小化了安全攻击面。
新一代软件交付方式开始浮现
从 Infrastructure as Code 到 Everything as Code
所有配置可被版本管理,可追溯,可审计。 所有配置可维护、可测试、可理解、可协作。 所有配置可以进行静态分析、保障变更的可预期性。 所有配置可以在不同环境重现,所有环境差异也需要进行显示声明,提升一致性。
声明式的 CI/CD 实践逐渐受到关注
运维体系从标准化、自动化向数据化、智能化演进
可观测能力的标准化:随着云原生技术社区 Prometheus、OpenTelemetry、OpenMetrics 等项目的发展,应用可观测性领域在日志、监控、链路追踪等领域进一步标准化和融合,使得多指标、根因分析的数据集更加丰富。Service Mesh 非侵入的数据遥测能力可以在不修改现有应用的前提下获取更加丰富的业务指标。从而提高 AIOPS 的 AI 层面的准确率和覆盖率。
应用交付管理能力的标准化:Kubernetes 声明式 API、面向终态的应用交付方式,提供了更加一致的管理运维体验。Service Mesh 非侵入的服务流量管理能力,让我们可以用透明的方式对应用进行管理和自动化运维。
云原生成本优化逐渐受到关注
日常业务:对于可预测的、相对不变的负载,我们可以利用包年包月的裸金属或者大规格虚拟机来提升资源利用率,降低成本。 计划内的短期或周期性业务:比如双十一大促,跨年活动等短期业务峰值,或者月底结算等周期性业务负载变化,我们可以利用虚拟机或者弹性容器实例来应对业务高峰。 非预期的突发弹性业务:比如突发新闻热点,或者临时的计算任务。弹性容器实例可以轻松实现每分钟上千实例的扩容。
总结
团队招聘
﹀
﹀
﹀
2021-02-10
2021-02-05
2021-02-10